package main

import (
	"log"

	"github.com/gin-gonic/gin"
)

// 自定义 中间件
// 第一种方式
func middleware1(c *gin.Context) {

}

// 第二种方式，官方推荐
func middleware2() gin.HandlerFunc {

	return func(c *gin.Context) {

	}
}

// 案例
func RefererMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		log.Println("RefererMiddleware in ......")
		ref := c.GetHeader("Referer")
		if ref == "" {
			c.AbortWithStatusJSON(200, gin.H{
				"msg": "非法访问",
			})
			return
		}
		c.Next()
		log.Println("RefererMiddleware done ......")
	}
}

func main() {
	r := gin.Default()
	// 调用第一种方式
	//r.Use(middleware1)
	// 调用第二种方式
	//r.Use(middleware2())
	// 案例
	r.Use(RefererMiddleware())
	r.Use(func(c *gin.Context) {
		log.Println("我是第二个中间件 in......")
		c.Next()
		log.Println("我是第二个中间件 donw......")
	})
	r.GET("ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"code": 0,
		})
	})
	r.Run()
}
